package nz.ac.massey.whatiscomputerscience.core.model.animator;

import nz.ac.massey.whatiscomputerscience.core.model.VectorImage;


/**
 * An animator is a mutator for models
 * An animator must have four core aspects
 * 
 * 1: State information - for parameterised mutation
 * 2: A mutation algorithm
 * 3: A stopping condition
 * 4: A VectorImage to mutate
 * 
 * An animator's mutate method may be called repeatedly until the stopping condition is satisfied
 * Calling mutate after the stopping condition is statisfied may result in an exception being thrown
 * 
 * @author Francis Stephens
 */
public interface Animator
{
	/**
	 * Causes a single mutation step to be effected on the model
	 * By default if the stopping condition has been satisfied this method will have no effect
	 */
	public abstract void mutate( );
	
	/**
	 * @return Indicates whether this Animator has satisfied its stopping condition
	 */
	public abstract boolean isStopped( );
	
	/**
	 * @param m The VectorImage to be acted upon
	 */
	public abstract void setVectorImage( VectorImage m );
}